package com.mastercard.assets.web.struts.actions;

import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

import com.mastercard.assets.MasterCardException;
import com.mastercard.assets.jpa.TblAsset;
import com.mastercard.assets.jpa.TblAssetSolicitud;
import com.mastercard.assets.jpa.TblCategoria;
import com.mastercard.assets.jpa.TblCuenta;
import com.mastercard.assets.jpa.TblCuentaPaquete;
import com.mastercard.assets.jpa.TblPaquete;
import com.mastercard.assets.jpa.TblSubcateg;
import com.mastercard.assets.jpa.TblTipoCuenta;
import com.mastercard.assets.jpa.TblTipoCuentaPaquete;
import com.mastercard.assets.notifications.NotificationUtil;
import com.mastercard.assets.util.MCUtil;
import com.mastercard.assets.util.dao.MasterCardDAO;
import com.mastercard.assets.web.struts.forms.*;
import com.mastercard.assets.web.util.to.ManejadorPaquetesSolicitar;
import com.mastercard.assets.web.util.to.PaqueteAutorizar;
import com.mastercard.assets.web.util.to.PaqueteSolicitar;
import com.mastercard.assets.web.util.to.UserLogin;

public class PaquetesAsignarEnviar
	extends
		Action
{
	public ActionForward execute(
							ActionMapping mapping , 
							ActionForm form ,
							HttpServletRequest request , 
							HttpServletResponse response )
		throws 
			IOException , 
			ServletException
	{
		HttpSession session = request.getSession( ) ;
		
		// en caos de null
		if( session == null )
			return mapping.findForward( "noLogin" ) ;
		
		// toma el userLogin
		UserLogin user = ( UserLogin ) session.getAttribute( "UserLogin" ) ;
		
		// en caso de null
		if( user == null )
			return mapping.findForward( "noLogin" ) ;
		
		// toma el form
		SolicitarPaqueteRegistrarForm f = ( SolicitarPaqueteRegistrarForm ) form ;
//                int cveCuenta = f.getCveCuenta();
                int cveCuenta = user.getActualCountId();
		String[ ] asignar = f.getAsignar() ;
		String[ ] paquete = f.getRegresar();
                
                try{
//                    user.setActualCountId(cveCuenta);
                    session.setAttribute( "UserLogin" , user ) ;
                }catch(Exception e){
                    
                }
		
		for(int i = 0 ;i<paquete.length;i++)
		{
			if( Integer.parseInt(asignar[i]) > 0 ){
                            for( int j = 0 ; j < Integer.parseInt(asignar[i]) ; j++ ){
                                    try
                                    {
                                            MasterCardDAO.autorizarPaquetes( cveCuenta , Integer.parseInt(paquete[i]), cveCuenta ) ;
                                            MasterCardDAO.cambiarStatusPaquetes( cveCuenta, Integer.parseInt(paquete[i]) ) ;
                                    }catch( Exception e )
                                    {
                                        MasterCardDAO.closeEntityManager( ) ;
                                            e.printStackTrace( ) ;
                                    }
                            }
                        }
		}
                
                
		System.out.println( "ListarPaquetesAsignadosBuscarPaquetes.java: " + cveCuenta ) ;
		TblCuenta cuenta = MasterCardDAO.findCountById( cveCuenta ) ;
		TblTipoCuenta tipoCuenta = cuenta.getTblTipoCuenta( ) ;
		GenerarCampanaForm f1 = new GenerarCampanaForm( ) ;
		SolicitarPaqueteRegistrarForm f2 = new SolicitarPaqueteRegistrarForm( ) ;   
		List<TblCuentaPaquete> paquetesAsignados = MasterCardDAO.getPaquetesAsignados( cveCuenta, tipoCuenta.getCveTipoCuenta( ) ) ;
                
		try
		{
			
                    try
                    {
                            ManejadorPaquetesSolicitar manejador = new ManejadorPaquetesSolicitar( ) ;
                            manejador.setCveTipoCuenta( tipoCuenta.getCveTipoCuenta( ) ) ;
                            manejador.setCveCuenta( cveCuenta ) ;
                            manejador.initialize( ) ;
                            f2.setPackageManager( manejador ) ;
                            request.setAttribute( "SolicitarPaqueteRegistrarForm" , f2 ) ;
                            request.setAttribute( "paquetesAsignados" , paquetesAsignados ) ;

                    }catch( MasterCardException mce )
                    {
                            user.setMessageError( mce.getSingularMessage( ) ) ;
                            user.setNextWorkArea( "" ) ;
                    }
                            f1.setCveCuenta( cveCuenta ) ;
                            f1.getPackageManager( ).initialize( ) ;

                            request.setAttribute( "GenerarCampanaForm" , f1 ) ;

            }catch(Exception e){
                    
            }
	return mapping.findForward( "success" ) ;
}
}